import puppeteer from 'puppeteer';

/**
 * 自动化登录测试脚本
 * 功能：打开 https://sharing.powerone.cn:8921/ 并执行登录操作
 */
const runLoginTest = async () => {
  let browser = null;
  
  try {
    console.log('===== 自动化登录测试开始 =====');
    
    // 启动浏览器，配置SSL证书忽略选项
    browser = await puppeteer.launch({
      headless: true,
      ignoreHTTPSErrors: true,
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--ignore-certificate-errors',
        '--allow-insecure-localhost',
        '--disable-features=IsolateOrigins,site-per-process'
      ],
      defaultViewport: {
        width: 1920,
        height: 1080
      }
    });
    
    console.log('浏览器启动成功');
    
    // 创建新页面
    const page = await browser.newPage();
    
    // 设置用户代理和HTTP头
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
    await page.setExtraHTTPHeaders({ 'accept-language': 'zh-CN,zh;q=0.9' });
    
    // 监听页面事件，便于调试
    page.on('console', msg => console.log('页面控制台:', msg.text()));
    page.on('pageerror', err => console.log('页面错误:', err));
    page.on('requestfailed', req => {
      console.log('请求失败:', req.url(), req.failure()?.errorText || '未知错误');
    });
    
    // 导航到目标网站
    console.log('正在导航到 https://sharing.powerone.cn:8921/...');
    await page.goto('https://sharing.powerone.cn:8921/', {
      waitUntil: ['domcontentloaded', 'networkidle0'],
      timeout: 60000
    });
    
    console.log('导航成功，页面标题:', await page.title());
    
    // 等待页面加载完成并获取登录元素
    console.log('等待登录页面加载...');
    
    // 根据页面检查结果，使用正确的选择器定位登录元素
      try {
        // 等待账号输入框出现（placeholder为"账号"）
        await page.waitForSelector('input[placeholder="账号"].el-input__inner', {
          timeout: 10000
        });
        
        // 等待密码输入框出现（placeholder为"密码"）
        await page.waitForSelector('input[placeholder="密码"].el-input__inner', {
          timeout: 10000
        });
        
        // 等待登录按钮出现（文本为"登录"）
        await page.waitForSelector('button.el-button.el-button--primary.el-button--large', {
          timeout: 10000
        });
        
        console.log('登录页面元素加载完成');
        
        // 尝试截图保存当前页面状态
        await page.screenshot({ path: 'login-page.png', fullPage: true });
        console.log('登录页面截图已保存为login-page.png');
        
        // 输入用户名和密码
        // 注意：这里使用的是占位符用户名和密码，实际使用时需要替换为有效凭据
        console.log('尝试输入用户名和密码...');
        
        // 使用正确的选择器输入用户名
        await page.type('input[placeholder="账号"].el-input__inner', 'admin');
        
        // 使用正确的选择器输入密码
        await page.type('input[placeholder="密码"].el-input__inner', 'password');
        
        console.log('用户名和密码输入完成');
        
        // 点击登录按钮
        console.log('尝试点击登录按钮...');
        
        // 使用正确的选择器点击登录按钮
        await page.click('button.el-button.el-button--primary.el-button--large');
      
      console.log('登录按钮点击完成，等待登录结果...');
      
      // 等待登录成功后的页面跳转或加载
      await page.waitForNavigation({
        waitUntil: ['domcontentloaded', 'networkidle0'],
        timeout: 30000
      }).catch(error => {
        console.log('导航等待超时，可能登录页面未跳转但已登录成功，继续检查...');
      });
      
      // 尝试获取登录后的页面标题和截图
      console.log('登录后的页面标题:', await page.title());
      await page.screenshot({ path: 'logged-in-page.png', fullPage: true });
      console.log('登录后页面截图已保存为logged-in-page.png');
      
      // 检查是否登录成功（可以根据页面内容进行判断）
      const pageContent = await page.content();
      if (pageContent.includes('欢迎') || pageContent.includes('dashboard') || pageContent.includes('控制台')) {
        console.log('✅ 登录成功！');
      } else {
        console.log('⚠️ 登录可能未成功，请检查登录凭据和页面状态');
      }
      
    } catch (elementError) {
      console.error('❌ 定位登录元素失败:', elementError.message);
      // 保存错误页面截图用于调试
      await page.screenshot({ path: 'login-error.png', fullPage: true });
      console.log('错误页面截图已保存为login-error.png');
    }
    
    console.log('===== 自动化登录测试结束 =====');
    
  } catch (error) {
    console.error('❌ 测试过程中发生错误:', error.message);
    console.error('详细错误信息:', error);
  } finally {
    // 确保浏览器关闭
    if (browser) {
      await browser.close();
      console.log('浏览器已关闭');
    }
  }
};

// 执行测试
runLoginTest();